#coding=utf-8
import os
import sys
import platform
from datetime import datetime

from ..common.__const__ import INI_PATH
from ..utils.ini_config_file import IniConfigFile
from .__remote_log__ import RemoteLogger

class Logger(object):

    def __init__(self, log_level='debug'):
        self.log_level=log_level
        self.is_remote_logger = False
        self.is_begin_write_logger = False
        self.flag=False

    def is_remote(self):
        #第一次写log，判断远端server是否开启
        if not self.is_begin_write_logger:
            self.is_begin_write_logger = True
            return RemoteLogger().send("[debug]check remote server")
        elif self.is_remote_logger:
            return True
        return False

    def handle_msg(self, msg, caller_info):
        msg = str(msg)
        file_info = str(caller_info[0])
        fun_info = str(caller_info[1])
        line_no = str(caller_info[2])

        if platform.system().lower() == 'windows':
            if "copy_blade\main" not in file_info:
                if '\\site-packages\\' in file_info:
                    file_info = file_info[file_info.index("\\site-packages\\") + len("\\site-packages\\"):]
                else:
                    file_info = os.path.split(str(file_info))[1]
                moudle_info = file_info
                msg = "{}({}):{} --> {}".format(moudle_info, fun_info, line_no, msg)
        else:
            if "copy_blade/main" not in file_info:
                if '/site-packages/' in file_info:
                    file_info = file_info[file_info.index("/site-packages/") + len("/site-packages/"):]
                else:
                    file_info = os.path.split(str(file_info))[1]
                moudle_info = file_info
                msg = "{}({}):{} --> {}".format(moudle_info, fun_info, line_no, msg)

        return msg

    def debug(self, msg):
        self.is_remote_logger = self.is_remote()
        msg = self.handle_msg(msg, self.__find_caller())
        #判断log的远端服务是否可用，如果不可用可打印日志到console中
        if self.is_remote_logger:
            if self.log_level in ['debug']:
                # RemoteLogger().send("[debug]" + msg)
                if self.flag:
                    self.remote_logger_instance.send("[debug]" + msg)
                else:
                    self.remote_logger_instance = RemoteLogger()
                    self.remote_logger_instance.send("[debug]" + msg)
                    self.flag=True
        else:
            msg = datetime.now().strftime("%Y-%m-%d %H:%M:%S:%f") + " [DEBUG] --> " + msg
            print(msg)
            # self.logging_log.get_logger().debug(msg)

    def __find_caller(self):
        # 获取被调用函数名称
        fn = sys._getframe(1).f_back.f_code.co_filename#文件路径
        ff = sys._getframe(1).f_back.f_code.co_name#函数名
        fl = sys._getframe(1).f_back.f_lineno#文件中的行号
        return (fn, ff, fl)

    def info(self, msg):
        self.is_remote_logger = self.is_remote()
        msg = self.handle_msg(msg, self.__find_caller())
        # 判断log的远端服务是否可用，如果不可用可打印日志到console中
        if self.is_remote_logger:
            if self.log_level in ['debug', 'info']:
                # RemoteLogger().send("[info]" + msg)
                if self.flag:
                    self.remote_logger_instance.send("[info]" + msg)
                else:
                    self.remote_logger_instance = RemoteLogger()
                    self.remote_logger_instance.send("[info]" + msg)
                    self.flag=True

        else:
            msg = datetime.now().strftime("%Y-%m-%d %H:%M:%S:%f") + " [INFO] --> " + msg
            print(msg)
            #test
            # self.logging_log.get_logger().info(msg)

    def warn(self, msg):
        self.is_remote_logger = self.is_remote()
        msg = self.handle_msg(msg, self.__find_caller())
        # 判断log的远端服务是否可用，如果不可用可打印日志到console中
        if self.is_remote_logger:
            if self.log_level in ['debug','info', 'warning', 'warn']:
                # RemoteLogger().send("[warning]" + msg)
                if self.flag:
                    self.remote_logger_instance.send("[warning]" + msg)
                else:
                    self.remote_logger_instance = RemoteLogger()
                    self.remote_logger_instance.send("[warning]" + msg)
                    self.flag = True
        else:
            msg = datetime.now().strftime("%Y-%m-%d %H:%M:%S:%f") + " [WARN] --> " + msg
            print(msg)
            # self.logging_log.get_logger().warning(msg)

    def warning(self, msg):
        self.is_remote_logger = self.is_remote()
        msg = self.handle_msg(msg, self.__find_caller())
        # 判断log的远端服务是否可用，如果不可用可打印日志到console中
        if self.is_remote_logger:
            if self.log_level in ['debug','info', 'warning', 'warn']:
                # RemoteLogger().send("[warning]" + msg)

                if self.flag:
                    self.remote_logger_instance.send("[warning]" + msg)
                else:
                    self.remote_logger_instance = RemoteLogger()
                    self.remote_logger_instance.send("[warning]" + msg)
                    self.flag = True
        else:
            msg = datetime.now().strftime("%Y-%m-%d %H:%M:%S:%f") + " [WARN] --> " + msg
            print(msg)
            # self.logging_log.get_logger().warning(msg)

    def error(self, msg, type = "UI"):
        self.is_remote_logger = self.is_remote()
        msg = self.handle_msg(msg, self.__find_caller())
        # 判断log的远端服务是否可用，如果不可用可打印日志到console中
        if self.is_remote_logger:
            if self.log_level in ['debug','info', 'warning', 'warn', 'error']:
                # RemoteLogger().send("[error]" + msg)
                if self.flag:
                    self.remote_logger_instance.send("[error]" + msg)
                else:
                    self.remote_logger_instance = RemoteLogger()
                    self.remote_logger_instance.send("[error]" + msg)
                    self.flag = True
        else:
            msg = datetime.now().strftime("%Y-%m-%d %H:%M:%S:%f") + " [ERROR] --> " + msg
            print(msg)
            # self.logging_log.get_logger().error(msg)

    def critical(self, msg,type = "UI"):
        self.is_remote_logger = self.is_remote()
        msg = self.handle_msg(msg, self.__find_caller())
        # 判断log的远端服务是否可用，如果不可用可打印日志到console中
        if self.is_remote_logger:
            if self.log_level in ['debug','info', 'warning', 'warn', 'error', 'critical']:
                # RemoteLogger().send("[critical]" + msg)
                if self.flag:
                    self.remote_logger_instance.send("[critical]" + msg)
                else:
                    self.remote_logger_instance = RemoteLogger()
                    self.remote_logger_instance.send("[critical]" + msg)
                    self.flag = True
        else:
            msg = datetime.now().strftime("%Y-%m-%d %H:%M:%S:%f") + " [CRITICAL] --> " + msg
            print(msg)
            # self.logging_log.get_logger().critical(msg)

if os.path.exists(INI_PATH):
    logger = Logger(IniConfigFile(INI_PATH).read('ReportLevel', 'reportlevel'))
else:
    logger = Logger("debug")
    # logger.warning('执行目录中缺少{}配置文件！'.format(INI_PATH.split('\\')[-1]))

#
# _logger = logger.logging_log



